package repository

import (
	"chatgpt/models"
	"encoding/json"
	"fmt"

	"github.com/go-redis/redis"
)

type RepoRedis struct {
	redis *redis.Client
}

func initRedis(redisHost, redisPort string) *RepoRedis {
	client := redis.NewClient(&redis.Options{
		Addr: fmt.Sprintf("%s:%s", redisHost, redisPort),
		DB:   0,
	})

	_, err := client.Ping().Result()
	if err != nil {
		fmt.Println("Error connecting to Redis:", err)
		return nil
	}

	fmt.Println("Connected to Redis successfully")
	return &RepoRedis{redis: client}
}

func (db *RepoRedis) GetChatHistory(key string) ([]models.ChatMessage, error) {

	// Получение значения по ключу из Redis
	val, err := db.redis.Get(key).Result()
	if err == redis.Nil {
		db.SetChatHistory(key, []models.ChatMessage{})
		return []models.ChatMessage{}, nil
	} else if err != nil {
		return nil, err
	}

	// Десериализация данных из JSON в срез структур ChatMessage
	var messages []models.ChatMessage
	err = json.Unmarshal([]byte(val), &messages)
	if err != nil {
		return nil, err
	}
	return messages, nil
}

func (db *RepoRedis) SetChatHistory(key string, messages []models.ChatMessage) error {

	messagesJSON, err := json.Marshal(messages)
	if err != nil {
		return err
	}

	err = db.redis.Set(key, messagesJSON, 0).Err()
	if err != nil {
		return err
	}

	return nil
}
